package com.dong.drool.autoconfigure.core;


import org.kie.api.runtime.KieContainer;

import java.util.List;

/**
 * 目前用于佣金计算所需的所有的drool接口
 * @author zhaodongchao
 * @date 2019/2/26 17:32
 */
public interface KieDroolExecutor {
    /**
     * 使用有状态的session执行相关的所有规则
     * @param fact 数据实体
     * @return fact触发执行的规则的数量
     */
    int execute(Fact fact);

    /**
     * 使用无状态的session执行规则
     * @param fact 数据实体
     */
    void executeStateLess(Fact fact) ;

    /**
     * 添加一条规则到规则引擎，不用重新初始化规则引擎
     * @param rule 要添加的规则实体
     */
    void addRule(RuleEntity rule);
    /**
     * 添加多条规则到现有的规则引擎当中
     * @param rules 规则实体集合
     */
    void addRules(List<RuleEntity> rules);

    /**
     * 获取添加到当前规则引擎中的所有规则实体信息
     * @return 规则实体信息
     */
    List<RuleEntity> getRules();

    /**
     * 通过规则的名称从当前规则引擎中移除一条规则
     * @param packageName the package name to which the rule belongs to
     * @param ruleName  the name of the rule
     */
    void removeRule(String packageName, String ruleName);

    /**
     * 移除所有的规则
     */
    void removeAllRules();

    /**
     *
     * 获取默认的KieContainer
     * @return KieContainer实例
     */
    KieContainer getKieContainer();

    /**
     * 重新初始化
     * @param rules
     */
    void reInitByRules(List<RuleEntity> rules);
}
